#include "queue.h"
// 初始化结点
node* init_node(){
	node* node=calloc(1,sizeof(node));
	if(node==NULL){
		printf("分配空间失败！\n");
		exit(0);
	}
	return node;
}
// 初始化队列
queue* init_queue(){
	queue* queue=calloc(1,sizeof(queue));
	if(queue==NULL){
		printf("分配空间失败！\n");
		exit(0);
	}
	return queue;
}
// 判断队列是否为空
int isEmpty(queue* p){
	return p->head==NULL;
}
int isInit(queue* p){
	return p==NULL;
}
// 入队push
int push(queue* q,data_t data){
	if(isInit(q))return -1;
	node* node=init_node();
	node->data=data;
	if(isEmpty(q)){
		q->head=node;
		q->end=node;
	}else{
		q->end->next=node;
		q->end=node;
	}
	return  1;
}
// 出队
void pop(queue* q){
	if(isInit(q))return;
	if(isEmpty(q))return;
	node* node=q->head;
	if(q->head==q->end){
		q->head=NULL;
		q->end=NULL;
		freeNode(node);
	}else{
		q->head=q->head->next;
		freeNode(node);
	}
}
// 释放结点
void freeNode(node* p){
	free(p);
	p=NULL;
}
// 遍历
void disp_queue(queue* q){
	if(isInit(q))return;
	if(isEmpty(q))return;
	node* p=q->head;
	printf("---------------\n");
	while(p!=NULL){
		printf("%d\n",p->data);
		p=p->next;
	}
	printf("---------------\n");
}
void clear_queue(queue* p){
	if(isInit(p))return;
	node* temp=p->head;
	node* node=NULL;
	while(temp!=NULL){
		node=temp->next;
		freeNode(temp);
		temp=node;
	}
}
